/**
 * Copyright 2013 The FROG Brigade
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.frogbrigade.bufonidae.data;

import javax.persistence.Entity;

/**
 * 国土交通省が提供する『大字・丁目レベル位置参照情報』のデータモデルです。
 * 
 * @author nobuyuki sekimori
 * @since 1.0.0
 * @version 1.0.0
 */
@Entity
public class NeighborhoodLevelLocationData
{
    /**
     * 都道府県コードです。
     */
    private String prefectureCode   = null;

    /**
     * 都道府県名です。
     */
    private String prefectureName   = null;

    /**
     * 市区町村コードです。
     */
    private String municipalityCode = null;

    /**
     * 市区町村名です。
     */
    private String municipalityName = null;

    /**
     * 大字・丁目コードです。
     */
    private String neighborhoodCode = null;

    /**
     * 大字・丁目名です。
     */
    private String neighborhoodName = null;

    /**
     * 　緯度です。
     */
    private double latitude         = 0.0d;

    /**
     * 経度です。
     */
    private double longitude        = 0.0d;

    /**
     * 出典です。
     */
    private int    sourceBookCode   = 0;

    /**
     * 大字・丁目種別です。
     */
    private int    neighborhoodType = 0;

    /**
     * オブジェクトを生成します。
     */
    public NeighborhoodLevelLocationData()
    {
    }

    /**
     * 指定した『大字・丁目レベル位置参照情報』のCSVレコードをオブジェクトにロードします。
     * 
     * @param record
     *            ロードする『大字・丁目レベル位置参照情報』のCSVレコードです。
     * @throws IllegalArgumentException
     *             CSVレコードの内容が不正な場合に発生します。
     */
    public void loadFromCsvRecord(String[] record)
    {
        try
        {
            this.prefectureCode = record[0];
            this.prefectureName = record[1];
            this.municipalityCode = record[2];
            this.municipalityName = record[3];
            this.neighborhoodCode = record[4];
            this.neighborhoodName = record[5];
            this.latitude = Double.parseDouble(record[6]);
            this.longitude = Double.parseDouble(record[7]);
            this.sourceBookCode = Integer.parseInt(record[8]);
            this.neighborhoodType = Integer.parseInt(record[9]);
        }
        catch (Exception ex)
        {
            throw new IllegalArgumentException("specified string array is not parsable.", ex);
        }
    }

    /**
     * 都道府県コードを取得します。
     * 
     * @return 都道府県コードです。
     */
    public String getPrefectureCode()
    {
        return this.prefectureCode;
    }

    /**
     * 都道府県コードを設定します。
     * 
     * @param prefectureCode
     *            都道府県コードです。
     */
    public void setPrefectureCode(String prefectureCode)
    {
        this.prefectureCode = prefectureCode;
    }

    /**
     * 都道府県名を取得します。
     * 
     * @return 都道府県名です。
     */
    public String getPrefectureName()
    {
        return this.prefectureName;
    }

    /**
     * 都道府県名を設定します。
     * 
     * @param prefectureName
     *            都道府県名です。
     */
    public void setPrefectureName(String prefectureName)
    {
        this.prefectureName = prefectureName;
    }

    /**
     * 市区町村コードを取得します。
     * 
     * @return 市区町村コードです。
     */
    public String getMunicipalityCode()
    {
        return this.municipalityCode;
    }

    /**
     * 市区町村コードを設定します。
     * 
     * @param municipalityCode
     *            市区町村コードです。
     */
    public void setMunicipalityCode(String municipalityCode)
    {
        this.municipalityCode = municipalityCode;
    }

    /**
     * 市区町村名を取得します。
     * 
     * @return 市区町村名です。
     */
    public String getMunicipalityName()
    {
        return this.municipalityName;
    }

    /**
     * 市区町村名を設定します。
     * 
     * @param municipalityName
     *            市区町村名です。
     */
    public void setMunicipalityName(String municipalityName)
    {
        this.municipalityName = municipalityName;
    }

    /**
     * 大字・丁目コードを取得します。
     * 
     * @return 大字・丁目コードです。
     */
    public String getNeighborhoodCode()
    {
        return this.neighborhoodCode;
    }

    /**
     * 大字・丁目コードを設定します。
     * 
     * @param neighborhoodCode
     *            大字・丁目コードです。
     */
    public void setNeighborhoodCode(String neighborhoodCode)
    {
        this.neighborhoodCode = neighborhoodCode;
    }

    /**
     * 大字・丁目名を取得します。
     * 
     * @return 大字・丁目名です。
     */
    public String getNeighborhoodName()
    {
        return this.neighborhoodName;
    }

    /**
     * 大字・丁目名を設定します。
     * 
     * @param neighborhoodName
     *            大字・丁目名です。
     */
    public void setNeighborhoodName(String neighborhoodName)
    {
        this.neighborhoodName = neighborhoodName;
    }

    /**
     * 緯度を取得します。
     * 
     * @return 緯度です。
     */
    public double getLatitude()
    {
        return this.latitude;
    }

    /**
     * 緯度を設定します。
     * 
     * @param latitude
     *            緯度です。
     */
    public void setLatitude(double latitude)
    {
        this.latitude = latitude;
    }

    /**
     * 経度を取得します。
     * 
     * @return 経度です。
     */
    public double getLongitude()
    {
        return this.longitude;
    }

    /**
     * 経度を設定します。
     * 
     * @param longitude
     *            経度です。
     */
    public void setLongitude(double longitude)
    {
        this.longitude = longitude;
    }

    /**
     * 出典を取得します。
     * 
     * @return 出典です。
     */
    public int getSourceBookCode()
    {
        return this.sourceBookCode;
    }

    /**
     * 出典を設定します。
     * 
     * @param sourceBookCode
     *            出典です。
     */
    public void setSourceBookCode(int sourceBookCode)
    {
        this.sourceBookCode = sourceBookCode;
    }

    /**
     * 大字・丁目種別を取得します。
     * 
     * @return 大字・丁目種別です。
     */
    public int getNeighborhoodType()
    {
        return this.neighborhoodType;
    }

    /**
     * 大字・丁目種別を設定します。
     * 
     * @param neighborhoodType
     *            大字・丁目種別です。
     */
    public void setNeighborhoodType(int neighborhoodType)
    {
        this.neighborhoodType = neighborhoodType;
    }
}